//
//  NSString+SYDES.m
//  GBMD5
//
//  Created by dllo on 16/8/16.
//  Copyright © 2016年 郭宝. All rights reserved.
//

#import "NSString+SYDES.h"
#import <CommonCrypto/CommonCrypto.h>
#define key @"01234567"
static Byte iv[] = {1,2,3,4,5,6,7,8};
@implementation NSString (SYDES)
- (NSString *)stringWithDES
{
//    1将字符串转成c字符串
    const char *string = [self UTF8String];
//    2接受容器
    unsigned char bytes[1024];
//    3容器大小
    size_t dataOutMoved = 0;
//    4des加密过程
//    参数1：加密/解密
//    参数2：加密/解密方式
//    参数3：分组密码的选项
//    参数4：密匙
//    参数5：密匙大小
//    参数6：向量
//    参数7：c的字符串
//    参数8：长度
//    参数9：接收容器
//    参数10：容器大小
//    参数11容器最终的个数
    CCCryptorStatus ryptorStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, string, strlen(string), bytes, 1024, &dataOutMoved);
//    5判断是否成功
    if (ryptorStatus == kCCSuccess) {
        NSLog(@"成功");
//        6转成字符串--base64返回
        NSData *desData = [NSData dataWithBytes:bytes length:dataOutMoved];
        NSString *desBase64String = [desData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
        return desBase64String;
    } else {
        NSLog(@"DES加密失败");
        return nil;
    }
}

- (NSString *)desWithString
{
    NSData *data = [[NSData alloc] initWithBase64EncodedString:self options:NSDataBase64DecodingIgnoreUnknownCharacters];
    const void *byte = data.bytes;
    unsigned char buffer[1024];
    size_t dataOutMoved = 0;
    CCCryptorStatus ryptorStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, byte, [data length], buffer, 1024, &dataOutMoved);
    if (ryptorStatus == kCCSuccess) {
        NSLog(@"解密成功");
        NSData *sourceData = [[NSData alloc] initWithBytes:buffer length:dataOutMoved];
        NSString *sourceString = [[NSString alloc] initWithData:sourceData encoding:NSUTF8StringEncoding];
        return sourceString;
    } else {
        NSLog(@"解密失败");
        return nil;
    }
    
    
    
    
    
    
    return @"";
}
@end
